/**
 * $Id: mxGmlShapeEdge.java,v 1.1 2010-09-08 14:52:50 david Exp $
 * Copyright (c) 2010 David Benson, Gaudenz Alder
 */
package com.mxgraph.io.gml;

import org.w3c.dom.Document;
import org.w3c.dom.Element;

/**
 * This class represents the properties of a JGraph edge.
 */
public class mxGmlShapeEdge {
    private String text = "";

    private String style = "";

    private String edgeSource;

    private String edgeTarget;

    /**
     * Construct a Shape Edge with text and style.
     *
     * @param text
     * @param style
     */
    public mxGmlShapeEdge(String text, String style) {
        this.text = text;
        this.style = style;
    }

    /**
     * Constructs a ShapeEdge from a xml shapeEdgeElement.
     *
     * @param shapeEdgeElement
     */
    public mxGmlShapeEdge(Element shapeEdgeElement) {
        Element labelElement = mxGmlUtils.childsTag(shapeEdgeElement,
                mxGmlConstants.JGRAPH + mxGmlConstants.LABEL);

        if (labelElement != null) {
            this.text = labelElement.getAttribute(mxGmlConstants.TEXT);
        }

        Element styleElement = mxGmlUtils.childsTag(shapeEdgeElement,
                mxGmlConstants.JGRAPH + mxGmlConstants.STYLE);

        if (styleElement != null) {
            this.style = styleElement.getAttribute(mxGmlConstants.PROPERTIES);

        }
    }

    /**
     * Construct an empty Shape Edge Element.
     */
    public mxGmlShapeEdge() {
    }

    /**
     * Generates a ShapeEdge Element from this class.
     *
     * @param document Document where the key Element will be inserted.
     * @return Returns the generated Elements.
     */
    public Element generateElement(Document document) {
        Element dataEdge = document.createElementNS(mxGmlConstants.JGRAPH_URL,
                mxGmlConstants.JGRAPH + mxGmlConstants.SHAPEEDGE);

        if (!this.text.equals("")) {
            Element dataEdgeLabel = document.createElementNS(
                    mxGmlConstants.JGRAPH_URL, mxGmlConstants.JGRAPH
                    + mxGmlConstants.LABEL);
            dataEdgeLabel.setAttribute(mxGmlConstants.TEXT, this.text);
            dataEdge.appendChild(dataEdgeLabel);
        }

        if (!this.style.equals("")) {
            Element dataEdgeStyle = document.createElementNS(
                    mxGmlConstants.JGRAPH_URL, mxGmlConstants.JGRAPH
                    + mxGmlConstants.STYLE);

            dataEdgeStyle.setAttribute(mxGmlConstants.PROPERTIES, this.style);
            dataEdge.appendChild(dataEdgeStyle);
        }

        return dataEdge;
    }

    public String getText() {
        return text;
    }

    public void setText(String text) {
        this.text = text;
    }

    public String getStyle() {
        return style;
    }

    public void setStyle(String style) {
        this.style = style;
    }

    public String getEdgeSource() {
        return edgeSource;
    }

    public void setEdgeSource(String edgeSource) {
        this.edgeSource = edgeSource;
    }

    public String getEdgeTarget() {
        return edgeTarget;
    }

    public void setEdgeTarget(String edgeTarget)
	{
		this.edgeTarget = edgeTarget;
	}
}
